home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mission 3
/
Mission 3.zip
/
Mission 3.iso
/
zugabe
/
va45
/
visual45
/
library
/
extend
/
fsel_upd.s
< prev
next >
Wrap
Text File
|
1998-08-03
|
5KB
|
174 lines
;------------------------------------------------------------------------------
; Method name : -
; Asm label : GWVA_CALL_FSEL_CP_BSS_UPDATE_FORM
; Description : appelle un sélecteur de fichier et update un buffer
; + option : copie le résultat vers un objet texte dans formulaire
;
; in : a0.l = pointeur sur le texte d'invitation (terminé par un 0.b) : 35 chars max.
; in : a1.l = masque pour les types fichiers à afficher : 18 caractères max
; in : a2.l = pointeur sur un éventuel ancien pathname : "A:\TEMP\" ou sinon #0.l
; in : a3.l = pointeur sur le BSS à remplir avec le retour du fsel (ou 0.l si pas)
; in : a4.l = pointeur sur la structure de la fenêtre où est l'objet à redessiner
; in : d0.w = numéro du formulaire où se trouve le texte à remplir pour update
; graphique ou -1.w si pas d'update (d1+d2 inutilisés dans ce cas)
; in : d1.w = numéro de l'objet de famille text à remplir avec le contenu en
; faisant attention de ne pas dépasser.
; in : d2.w = si long nouveau nom > longueur prévue dans le form :
; GWVA_CFCBUF_ALIGN_LEFT = alignement à gauche (PATH.......)
; GWVA_CFCBUF_ALIGN_RIGHT = alignement à droite (.......PATH)
; GWVA_CFCBUF_ALIGN_CENTER = centé (PATH...NAME)
; in : d3.w = quoi recopier ? en retour du file_selector
; GWVA_CFCBUF_COPY_NAME = recopier le nom (8+3) uniquement
; GWVA_CFCBUF_COPY_PATH = recopier le path uniquement
; GWVA_CFCBUF_COPY_PATHNAME = recopie tout le pathname
; out : d7.w = code retour du fsel (0 si annule, <0 pour erreur, >0 pour OK)
;
; 23/05/98 : Création
;------------------------------------------------------------------------------
GWVA_CALL_FSEL_CP_BSS_UPDATE_FORM:
save.l d0-d3/a3/a4
bsr GWVA_FILE_SELECTOR
move d0,d7
load.l d0-d3/a3/a4
tst d7
ble .annule_ou_erreur
cmp.w #GWVA_CFCBUF_COPY_NAME,d3
bne.s .pas83
move.l a0,a2 ; nom en 8+3
bra.s .do_copy
.pas83: cmp #GWVA_CFCBUF_COPY_PATH,d3
bne.s .do_copy
move.l a1,a2 ; pathname
.do_copy: save.l a2
cmp.l #0,a3 ; pas de copie vers un BSS
beq.s .no_copy
.copy0: move.b (a2)+,(a3)+
bne.s .copy0
.no_copy: load.l a1 ; a1 => info copiée va resservir
cmp.w #-1,d0
beq.s .no_graphic_update
move.l a4,a0
move #GWVA_CFCBUF_REDRAW_YES,d3
bsr GWVA_NO_FSEL_CP_BSS_UPDATE_FORM
.no_graphic_update:
clr d7
.annule_ou_erreur:
rts
;------------------------------------------------------------------------------
; Method name : -
; Asm label : GWVA_NO_FSEL_CP_BSS_UPDATE_FORM
; Description : copie un path(name) dans un formulaire avec alignement
; + redraw éventuel
;
; in : a0.l = pointeur sur la structure de la fenêtre où est l'objet à redessiner (ne sert pas si pas de redraw)
; in : a1.l = pointeur sur le buffer source pour la recopie dans le formulaire
; in : d0.w = numéro du formulaire où se trouve le texte à remplir pour update
; graphique ou -1.w si pas d'update (d1+d2 inutilisés dans ce cas)
; in : d1.w = numéro de l'objet de famille text à remplir avec le contenu en
; faisant attention de ne pas dépasser.
; in : d2.w = si long nouveau nom > longueur prévue dans le form :
; GWVA_CFCBUF_ALIGN_LEFT = alignement à gauche (PATH.......)
; GWVA_CFCBUF_ALIGN_RIGHT = alignement à droite (.......PATH)
; GWVA_CFCBUF_ALIGN_CENTER = centé (PATH...NAME)
; in : d3.w = doit on faire un redraw ?
; GWVA_CFCBUF_REDRAW_YES = oui
; GWVA_CFCBUF_REDRAW_NO = non
; out : d7.w = code retour du fsel (0 si annule, <0 pour erreur, >0 pour OK)
;
; 23/05/98 : Création
;------------------------------------------------------------------------------
GWVA_NO_FSEL_CP_BSS_UPDATE_FORM:
save.l d1/d2/d3/a0/a1 ; d0=père d1=fils
bsr GWVA_RSC_RETURN_PTR_ON_TEXT
move.w ([a0,ob_spec],te_txtlen),d4 ; longueur du texte
subq #1,d4 ; moins le 0
load.l d0/d2/d3/a0/a2
move.l a2,a3
move #-1,d1
.compte: add #1,d1
tst.b (a3)+
bne.s .compte
cmp d4,d1
ble.s .inf_taille_max
cmp #GWVA_CFCBUF_ALIGN_LEFT,d2
beq.s .alignement_gauche
cmp #GWVA_CFCBUF_ALIGN_RIGHT,d2
beq.s .alignement_droite
.centre: move d4,d2
lsr.w #1,d2
move d2,d5
subq #1,d5
move.l a2,a3
.cp_gauche: move.b (a3)+,(a1)+
dbf d5,.cp_gauche
move.b #'~',(a1)+
add.w d1,a2
move d4,d1 ; copie max
sub d2,d1 ; moins deja copié
sub #1,d1 ; moins "~"
sub.w d1,a2
bra.s .do_the_copy
.alignement_gauche:
move d4,d1 ; copie max
sub #1,d1 ; moins "~"
move.b #'~',0(a1,d1.w)
bra.s .do_the_copy
.alignement_droite:
move.b #'~',(a1)+
add.w d1,a2
move d4,d1 ; copie max
sub #1,d1 ; moins "~"
sub.w d1,a2
bra.s .do_the_copy
.inf_taille_max:
clr.b 0(a1,d1.w)
.do_the_copy:
subq #1,d1
bmi.s .nothing2copy
.cp: move.b (a2)+,(a1)+
dbf d1,.cp
.nothing2copy:
cmp.w #GWVA_CFCBUF_REDRAW_NO,d3
beq.s .no_wind_redraw
lea GWVA_FSEL_UPD_TMP_OBJ_LIST,a1
move.w d0,(a1)
move.w #1,2(a1)
move.w #GWVA_WRSC_CTE_REDRAW_PART_END_LIST,4(a1)
GWVA_CALL_METHOD_OTHER_OBJ #GWVA_METHOD_WRSC_REDRAW_PART_CONTENTS
.no_wind_redraw:
rts
BSS
GWVA_FSEL_UPD_TMP_OBJ_LIST: ds.w 2+1
TEXT